#ifndef HISTORYDATABRIDGE_H
#define HISTORYDATABRIDGE_H

#include <QObject>
#include <QDateTime>
#include <QVariantList>
#include <QVariantMap>
#include "../database/dbmanager.h"

/**
 * @brief 历史数据桥接类
 *
 * 用于在 QML 和 C++ 之间传递历史数据查询结果
 * 将 C++ 的 QVector<HistoryData> 转换为 QML 可用的 QVariantList
 */
class HistoryDataBridge : public QObject
{
    Q_OBJECT

public:
    explicit HistoryDataBridge(DBManager *dbManager, QObject *parent = nullptr);
    ~HistoryDataBridge();

    /**
     * @brief 查询历史数据（QML 可调用）
     * @param meterId 电表ID（-1表示所有电表）
     * @param startTime 开始时间字符串（格式：yyyy-MM-dd HH:mm:ss）
     * @param endTime 结束时间字符串（格式：yyyy-MM-dd HH:mm:ss）
     * @return QVariantList 历史数据列表（每个元素是 QVariantMap）
     */
    Q_INVOKABLE QVariantList queryHistoryData(int meterId,
                                              const QString &startTime,
                                              const QString &endTime);

    /**
     * @brief 查询历史数据（分页，QML 可调用）
     * @param meterId 电表ID
     * @param startTime 开始时间字符串
     * @param endTime 结束时间字符串
     * @param offset 偏移量
     * @param limit 每页数量
     * @return QVariantList 历史数据列表
     */
    Q_INVOKABLE QVariantList queryHistoryDataPaged(int meterId,
                                                   const QString &startTime,
                                                   const QString &endTime,
                                                   int offset,
                                                   int limit);

    /**
     * @brief 获取历史数据数量（QML 可调用）
     * @param meterId 电表ID（-1表示所有电表）
     * @param startTime 开始时间字符串
     * @param endTime 结束时间字符串
     * @return int 记录数量
     */
    Q_INVOKABLE int getHistoryDataCount(int meterId,
                                        const QString &startTime,
                                        const QString &endTime);

    /**
     * @brief 导出数据为CSV（QML 可调用）
     * @param meterId 电表ID
     * @param startTime 开始时间字符串
     * @param endTime 结束时间字符串
     * @param filePath 导出文件路径
     * @return bool 是否成功
     */
    Q_INVOKABLE bool exportToCSV(int meterId,
                                 const QString &startTime,
                                 const QString &endTime,
                                 const QString &filePath);

    /**
     * @brief 查询历史数据统计信息（QML 可调用）
     * @param meterId 电表ID
     * @param startTime 开始时间字符串（格式：yyyy-MM-dd HH:mm:ss）
     * @param endTime 结束时间字符串（格式：yyyy-MM-dd HH:mm:ss）
     * @return QVariantMap 统计数据映射
     */
    Q_INVOKABLE QVariantMap queryHistoryStatistics(int meterId,
                                                   const QString &startTime,
                                                   const QString &endTime);

signals:
    /**
     * @brief 查询完成信号
     * @param count 查询结果数量
     */
    void queryCompleted(int count);

    /**
     * @brief 查询错误信号
     * @param errorMessage 错误消息
     */
    void queryError(const QString &errorMessage);

    /**
     * @brief 导出完成信号
     * @param filePath 导出文件路径
     * @param count 导出记录数
     */
    void exportCompleted(const QString &filePath, int count);

    /**
     * @brief 导出错误信号
     * @param errorMessage 错误消息
     */
    void exportError(const QString &errorMessage);

private:
    /**
     * @brief 将 HistoryData 转换为 QVariantMap
     * @param data 历史数据
     * @return QVariantMap QML 可用的数据映射
     */
    QVariantMap historyDataToVariantMap(const HistoryData &data);

    /**
     * @brief 解析时间字符串
     * @param timeStr 时间字符串
     * @return QDateTime 解析后的时间
     */
    QDateTime parseDateTime(const QString &timeStr);

private:
    DBManager *m_dbManager; ///< 数据库管理器
};

#endif // HISTORYDATABRIDGE_H
